#pragma once

#include <functional>
#include <memory>

class TcpConnection;
class InetAddress;
class EventLoop;
class Buffer;

// Acceptor.h
using NewConnectionCallback = std::function<void(int, InetAddress)>;

// TcpServer.h
using TcpConnectionPtr = std::shared_ptr<TcpConnection>;
using ConnectionCallback = std::function<void(const TcpConnectionPtr&)>;
using MessageCallback = std::function<void(const TcpConnectionPtr&, Buffer*)>;
using WriteCompleteCallback = std::function<void(const TcpConnectionPtr&)>;
using HighWaterMarkCallback = std::function<void(const TcpConnectionPtr&, size_t)>;
using CloseCallback = std::function<void(const TcpConnectionPtr&)>;
using ThreadInitCallback = std::function<void(EventLoop*)>;
